# =======================================================
# 关于文件操作的静态函数库
# =======================================================

class_name myFile
# ======================== 文件内容读写 ======================== 


static func kill_file(path:String) -> void:
	var dir = Directory.new()
	if dir.dir_exists(path):
		dir.remove(path)


# 保存字符串到指定路径的文件
static func saveString(path:String,content:String) -> void:
	var file = File.new()
	file.open(path,File.WRITE)
	file.store_string(content) # 整体存储
	file.close()

# 保存字典为JSON - 单个文件 - 单行JSON
static func saveJSON(path:String,content:Dictionary) -> void:
	var file = File.new()
	var string = to_json(content) # 转化为JSON字串
	file.open(path,File.WRITE)
	file.store_string(string) # 整体存储
	file.close()
	
# 保存多个字典为JSON - 单个文件 - 多行JSON
# contents传入一个以要保存的字典变量为成员的数组
static func save_mult_JSON(path:String,contents:Array) -> void:
	var file = File.new()
	file.open(path,File.WRITE)
	for content in contents:
		if typeof(content) == TYPE_DICTIONARY: # 过滤非字典变量
			var string = to_json(content) # 转化为JSON字串
			file.store_line(string) # 按行存储
	file.close()
	
# 保存数组为CSV - 单个文件 - 单行CSV
static func saveCSV(path:String,content:Array) -> void:
	var file = File.new()
	file.open(path,File.WRITE)
	file.store_csv_line(content) # 变相整体存储 - 只写一行
	file.close()

# 保存数组为CSV - 单个文件 - 多行CSV
# contents传入一个以要保存的数组变量为成员的数组
static func save_mult_CSV(path:String,contents:Array) -> void:
	var file = File.new()
	file.open(path,File.WRITE)
	for content in contents:
		if typeof(content) == TYPE_ARRAY: # 过滤非数组变量
			file.store_csv_line(content) # 按行存储
	file.close()

# 返回指令路径文件中的内容
static func loadString(path:String) -> String:
	var file = File.new()
	var string = ""
	file.open(path,File.READ)
	string = file.get_as_text() # 整个文件内容
	file.close()
	return string

# 加载单个文件 - JSON字串为字典 
static func loadJSON(path:String) -> Dictionary:
	var file = File.new()
	var string = ""
	file.open(path,File.READ)
	string = file.get_as_text() # 整个文件内容
	var dir = parse_json(string) # parse_json的结果有可能是数组有可能是字典，但是我们保存时用的是字典
	file.close()
	return dir

# 加载单个文件 - 多行 - JSON字串为字典 
static func load_mult_JSON(path:String) -> Array:
	var file = File.new()
	file.open(path,File.READ)
	var jsons = []
	while file.eof_reached() == false:# 直到到达文件末尾
		var get_str = file.get_line() 
		if parse_json(get_str) != null:
			jsons.append(parse_json(get_str)) # 将JSON转字典存入数组
	file.close()
	return jsons

# 加载单个文件 - CSV字串为数组 
static func loadCSV(path:String) -> Array:
	var file = File.new()
	file.open(path,File.READ)
	var arr = file.get_csv_line() # 只读取第一行
	file.close()
	return arr

# 加载单个文件 - 多行 - CSV字串为数组
static func load_mult_CSV(path:String) -> Array:
	var file = File.new()
	file.open(path,File.READ)
	var arrs = []
	while file.eof_reached() == false:# 直到到达文件末尾
		var get_arr = file.get_csv_line() # get_csv_line() 返回PoolStringArray（纯文本数组）
		if get_arr.size() != 1 and str(get_arr[0]).trim_prefix("").trim_suffix("")!= "":
			arrs.append(get_arr) # 将JSON转字典存入数组
	file.close()
	return arrs

# ======================== 文件/文件夹列表获取 ======================== 
# 返回指定路径下，指定后缀名的文件列表名集合
static func file_filter(path:String,filter:String) -> Array:
	var files = []
	var dir = Directory.new()
	if dir.open(path) == OK:
		dir.list_dir_begin()
		var file_name = dir.get_next()
		while file_name != "":
			if dir.current_is_dir() == false and "." + file_name.get_extension() == filter:
				files.append(file_name) 
			file_name = dir.get_next()
	return files
	
# 返回指定路径下，第一级子文件夹名称集合
static func sub_dirs(path:String) -> Array:
	var dirs = []
	var dir = Directory.new()
	if dir.open(path) == OK:
		dir.list_dir_begin()
		var dir_name = dir.get_next()
		while dir_name != "":
			if dir.current_is_dir() and dir_name != "." and dir_name != "..":
				dirs.append(dir_name) 
			dir_name = dir.get_next()
	return dirs

